// https://leetcode.cn/problems/set-mismatch/
// Created by ade on 2022/8/10.
// 集合 s 包含从 1 到 n 的整数。不幸的是，因为数据错误，导致集合里面某一个数字复制了成了集合里面的另外一个数字的值
// ，导致集合 丢失了一个数字 并且 有一个数字重复 。
//
// 给定一个数组 nums 代表了集合 S 发生错误后的结果。
//
// 请你找出重复出现的整数，再找到丢失的整数，将它们以数组的形式返回。
//2 <= nums.length <= 104
//1 <= nums[i] <= 104
#include <iostream>
#include <vector>

using namespace std;

class Solution {
public:
    vector<int> findErrorNums(vector<int> &nums) {
        int len = nums.size();
        vector<int> v(len + 1);
        vector<int> res = {};
        for (int i = 1; i <= len; i++) {
            v[nums[i - 1]]++;
            if (v[nums[i - 1]] == 2) {
                res.emplace_back(nums[i - 1]);
            }
        }

        for (int i = 1; i <= len; i++) {
            if (v[i] == 0) {
                res.emplace_back(i);
                break;
            }
        }
        return res;
    }
};

int main() {
    Solution so;
    vector<int> nums = {3, 2, 3};
    auto a = so.findErrorNums(nums);
    cout << a[0] << "," << a[1] << endl;
    return 0;
}